package com.easysoft.commons.utils;

public class StringUtils {

	/**
	 * 将多个不为null的字符串按照先后顺序拼接成一个字符串
	 * 
	 * @param strs
	 *            字符串
	 * @return 新的字符串
	 */
	public static String append(String... strs) {
		StringBuffer sb = new StringBuffer();
		for (String s : strs) {
			if (isNotNullAndBlank(s)) {
				sb.append(s);
			}
		}
		return sb.toString();
	}

	/**
	 * 判断字符串是否为null或空（包含多个空格的字符串）<br>
	 * StringUtils.isNotNullAndBlank(null) = true ;<br>
	 * StringUtils.isNotNullAndBlank(" ") = true ;<br>
	 * StringUtils.isNotNullAndBlank("") = true ;<br>
	 * StringUtils.isNotNullAndBlank("b") = false;
	 * 
	 * @param str
	 * @return true：为null或空；false：不为null和空
	 */
	public static boolean isNullOrBlank(String str) {
		return (str == null || "".equals(str.trim()));
	}

	/**
	 * 判断字符串不为null或空（包含多个空格的字符串）<br>
	 * StringUtils.isNotNullAndBlank(null) = false ;<br>
	 * StringUtils.isNotNullAndBlank(" ") = false ;<br>
	 * StringUtils.isNotNullAndBlank("") = false ;<br>
	 * StringUtils.isNotNullAndBlank("b") = true;
	 * 
	 * @param str
	 *            String对象
	 * @return true：不为null或空；false：为null或空
	 */
	public static boolean isNotNullAndBlank(String str) {
		return !isNullOrBlank(str);
	}

	/**
	 * 判断输入是否为null<br>
	 * StringUtils.nullToDefault(null) = "" ;<br>
	 * StringUtils.nullToDefault("b") = "b";
	 * 
	 * @param str
	 *            String对象
	 * @return String
	 */
	public static String nullToBlank(String str) {
		return nullToDefault(str, "");
	}

	/**
	 * 判断输入是否为null<br>
	 * StringUtils.nullToDefault(null, "a") = "a" ;<br>
	 * StringUtils.nullToDefault("b", "a") = "b";
	 * 
	 * @param str
	 *            String对象
	 * @param def
	 *            默认值
	 * @return String
	 */
	public static String nullToDefault(String str, String def) {
		if (str == null) {
			return def;
		}

		return str;
	}

	/**
	 * 将 String 转换成 int <br>
	 * StringUtils.toInt(null) = 0 ;<br>
	 * StringUtils.toInt("") = 0 ;<br>
	 * StringUtils.toInt("1") = 1;
	 * 
	 * @param str
	 *            String 对象
	 * @return int，如果 String 无法转换为 int 则返回0
	 */
	public static int toInt(String str) {
		return toInt(str, 0);
	}

	/**
	 * 将 String 转换成 int <br>
	 * StringUtils.toInt(null, 9) = 9 ;<br>
	 * StringUtils.toInt("", 9) = 9 ;<br>
	 * StringUtils.toInt("1", 9) = 1;
	 * 
	 * @param str
	 *            String 对象
	 * @param def
	 *            默认值，如果 String 无法转换为 int 则返回默认值
	 * @return int
	 */
	public static int toInt(String str, int def) {
		if (isNullOrBlank(str)) {
			return 0;
		}

		try {
			return Integer.valueOf(str);
		}
		catch (Exception e) {
		}

		return def;
	}

	/**
	 * 将 String 转换成 long <br>
	 * StringUtils.toLong(null) = 0 ;<br>
	 * StringUtils.toLong("") = 0 ;<br>
	 * StringUtils.toLong("1") = 1;
	 * 
	 * @param str
	 *            String 对象
	 * @return long，如果 String 无法转换为 long 则返回0
	 */
	public static long toLong(String str) {
		return toLong(str, 0);
	}

	/**
	 * 将 String 转换成 long <br>
	 * StringUtils.toLong(null, 9) = 9 ;<br>
	 * StringUtils.toLong("", 9) = 9 ;<br>
	 * StringUtils.toLong("1", 9) = 1;
	 * 
	 * @param str
	 *            String 对象
	 * @param def
	 *            默认值，如果 String 无法转换为 long 则返回默认值
	 * @return long
	 */
	public static long toLong(String str, int def) {
		if (isNullOrBlank(str)) {
			return 0;
		}

		try {
			return Long.valueOf(str);
		}
		catch (Exception e) {
		}

		return def;
	}

	/**
	 * 分解输入的字符串
	 * 
	 * @param str
	 *            字符串
	 * @param step
	 *            步长
	 * @return 分解后的字符串
	 */
	public static String[] split(String str, int step) {

		String[] strArray = null;

		if (str.length() < step) {
			strArray = new String[1];
			strArray[0] = str;
			return strArray;
		}

		char[] chars = str.toCharArray();
		int length = (int) Math.ceil((float) chars.length / step);

		char[] temp = new char[step];
		int put = 0;

		strArray = new String[length];
		int idx = 0;

		for (int i = 0; i < chars.length; i++) {
			int m = i % step;

			temp[m] = chars[i];
			put++;

			if (put == step || (i + 1 == chars.length)) {
				strArray[idx++] = new String(temp);

				int lost = chars.length - i - 1;
				if (lost < step) {
					temp = new char[lost];
				}
				else {
					temp = new char[step];
				}

				put = 0;
			}
		}

		return strArray;
	}
}
